dspawpy.io package

Submodules

dspawpy.io.read module

dspawpy.io.read.get_band_data(band_dir: str, syst_dir: str = None, efermi: float = None, zero_to_efermi: bool = False) BandStructureSymmLine

读取h5或json文件中的能带数据,构建BandStructureSymmLine对象

Parameters:
  • band_dir (str) --

    • 能带文件路径,band.h5 / band.json 或包含band.h5 / band.json的文件夹

    • 注意,wannier.h5 也可以使用此函数读取,但band_dir不支持文件夹类型

  • syst_dir (str) -- system.json 路径,仅为辅助处理 Wannier 数据而准备(从中读取结构和费米能级)

  • efermi (float, optional) -- 费米能级,如果h5文件中的费米能级不正确,可以通过此参数指定费米能级

  • zero_to_efermi (bool, optional) -- 是否将费米能级移动到0

Return type:

BandStructureSymmLine

Examples

>>> from dspawpy.io.read import get_band_data
>>> band = get_band_data(band_dir='/data/home/hzw1002/dspawpy_repo/test/2.3/band.h5')

如果希望通过指定wannier.json来处理瓦尼尔能带,需要额外指定syst_dir参数

>>> band = get_band_data(band_dir='/data/home/hzw1002/dspawpy_repo/test/2.30/wannier.json', syst_dir='/data/home/hzw1002/dspawpy_repo/test/2.30/system.json')
dspawpy.io.read.get_dos_data(dos_dir: str, return_dos=False) CompleteDos

读取h5或json文件中的态密度数据,构建CompleteDos或DOS对象

Parameters:
  • dos_dir (str) -- 态密度文件路径,dos.h5 / dos.json 或包含dos.h5 / dos.json的文件夹

  • return_dos (bool, optional) -- 是否返回DOS对象,如果为False,则统一返回CompleteDos对象(无论计算时是否开了投影)

Return type:

CompleteDos or Dos

Examples

>>> from dspawpy.io.read import get_dos_data
>>> dos = get_dos_data(dos_dir='/data/home/hzw1002/dspawpy_repo/test/2.5/dos.h5')
dspawpy.io.read.get_ele_from_h5(hpath: str = 'aimd.h5')

从h5文件中读取元素列表; 多离子步并不会在每个离子步的Structure中保存元素信息,只能读取初始结构的元素信息

Parameters:

hpath (str) -- h5文件路径

Returns:

ele -- 元素列表, Natom x 1

Return type:

list

Examples

>>> from dspawpy.io.read import get_ele_from_h5
>>> ele = get_ele_from_h5(hpath='/data/home/hzw1002/dspawpy_repo/test/2.18/aimd.h5')
>>> ele
['H', 'H_1', 'O']
dspawpy.io.read.get_lines_without_comment(filename: str, comment: str = '#')

读取as文件内容,移除批注后返回行列表

Examples

>>> from dspawpy.io.read import get_lines_without_comment
>>> lines = get_lines_without_comment(filename='/data/home/hzw1002/dspawpy_repo/test/2.15/01/structure01.as', comment='#')
>>> lines
['Total number of atoms', '13', 'Lattice', '5.60580000 0.00000000 0.00000000', '0.00000000 5.60580000 0.00000000', '0.00000000 0.00000000 16.81740000', 'Cartesian', 'H 2.48700709 3.85367720 6.93461994', 'Pt 1.40145000 1.40145000 1.98192999', 'Pt 4.20434996 1.40145000 1.98192999', 'Pt 1.40145000 4.20434996 1.98192999', 'Pt 4.20434996 4.20434996 1.98192999', 'Pt 0.00843706 0.00042409 3.91500875', 'Pt 0.00881029 2.80247953 3.91551673', 'Pt 2.81216310 -0.00105882 3.91807627', 'Pt 2.81156629 2.80392163 3.91572506', 'Pt 1.41398585 1.39603492 5.85554462', 'Pt 4.22886663 1.39820574 5.84677553', 'Pt 1.40485707 4.20963461 5.89521929', 'Pt 4.23788559 4.20753128 5.88625580']
dspawpy.io.read.get_phonon_band_data(phonon_band_dir: str) PhononBandStructureSymmLine

读取h5或json文件中的声子能带数据,构建PhononBandStructureSymmLine对象

Parameters:

phonon_band_dir (str) -- 能带文件路径,phonon.h5 / phonon.json 或包含这两个文件的文件夹

Return type:

PhononBandStructureSymmLine

Examples

>>> from dspawpy.io.read import get_phonon_band_data
>>> band_data = get_phonon_band_data("/data/home/hzw1002/dspawpy_repo/test//2.16/phonon.h5") # 读取声子能带
dspawpy.io.read.get_phonon_dos_data(phonon_dos_dir: str) PhononDos

读取h5或json文件中的声子态密度数据,构建PhononDos对象

Parameters:

phonon_dos_dir (str) -- 声子态密度文件路径,phonon_dos.h5 / phonon_dos.json 或包含这两个文件的文件夹

Return type:

PhononDos

Examples

>>> from dspawpy.io.read import get_phonon_dos_data
>>> phdos = get_phonon_dos_data(phonon_dos_dir='/data/home/hzw1002/dspawpy_repo/test/2.16.1/phonon.h5')
>>> phdos.frequencies
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ,
        1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9,  2. ,  2.1,
        2.2,  2.3,  2.4,  2.5,  2.6,  2.7,  2.8,  2.9,  3. ,  3.1,  3.2,
        3.3,  3.4,  3.5,  3.6,  3.7,  3.8,  3.9,  4. ,  4.1,  4.2,  4.3,
        4.4,  4.5,  4.6,  4.7,  4.8,  4.9,  5. ,  5.1,  5.2,  5.3,  5.4,
        5.5,  5.6,  5.7,  5.8,  5.9,  6. ,  6.1,  6.2,  6.3,  6.4,  6.5,
        6.6,  6.7,  6.8,  6.9,  7. ,  7.1,  7.2,  7.3,  7.4,  7.5,  7.6,
        7.7,  7.8,  7.9,  8. ,  8.1,  8.2,  8.3,  8.4,  8.5,  8.6,  8.7,
        8.8,  8.9,  9. ,  9.1,  9.2,  9.3,  9.4,  9.5,  9.6,  9.7,  9.8,
        9.9, 10. , 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9,
       11. , 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7, 11.8, 11.9, 12. ,
       12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7, 12.8, 12.9, 13. , 13.1,
       13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8, 13.9, 14. , 14.1, 14.2,
       14.3, 14.4, 14.5, 14.6, 14.7, 14.8, 14.9, 15. , 15.1, 15.2, 15.3,
       15.4, 15.5, 15.6, 15.7, 15.8, 15.9, 16. , 16.1, 16.2, 16.3, 16.4,
       16.5, 16.6, 16.7, 16.8, 16.9, 17. , 17.1, 17.2, 17.3, 17.4, 17.5,
       17.6, 17.7, 17.8, 17.9, 18. , 18.1, 18.2, 18.3, 18.4, 18.5, 18.6,
       18.7, 18.8, 18.9, 19. , 19.1, 19.2, 19.3, 19.4, 19.5, 19.6, 19.7,
       19.8, 19.9, 20. ])
dspawpy.io.read.get_sinfo(datafile: str, scaled=False, si=None, ele=None, ai=None)

从datafile中读取结构信息

Parameters:
  • datafile (str) -- h5 / json 文件路径

  • scaled (bool, optional) -- 是否返回分数坐标,默认False

  • si (int or list or str, optional) -- 运动轨迹中的第几步,从1开始计数! 如果要切片,用字符串写法: '1, 10' 默认为None,返回所有步

  • ele (list, optional) -- 元素列表, Natom x 1 默认为None,从h5文件中读取

  • ai (int or list or str, optional) -- 多离子步中的第几个离子步,从1开始计数 如果要切片,用字符串写法: '1, 10' 默认为None,返回所有离子步

Returns:

  • Nstep (int) -- 总离子步数(几个构型)

  • ele (list) -- 元素列表, Natom x 1

  • pos (np.ndarray) -- 坐标分量数组,Nstep x Natom x 3

  • latv (np.ndarray) -- 晶胞矢量数组,Nstep x 3 x 3

  • D_mag_fix (dict) -- 磁矩、自由度相关信息

Examples

>>> from dspawpy.io.read import get_sinfo
>>> Nstep, eles, pos, latv, D_mag_fix = get_sinfo(datafile='/data/home/hzw1002/dspawpy_repo/test/2.18/aimd.h5', scaled=False, si=None, ele=None, ai=None)
Reading /data/home/hzw1002/dspawpy_repo/test/2.18/aimd.h5...
>>> Nstep, eles, pos, latv, D_mag_fix = get_sinfo(datafile='/data/home/hzw1002/dspawpy_repo/test/2.1/relax.json', scaled=False, si=None, ele=None, ai=None)
Reading /data/home/hzw1002/dspawpy_repo/test/2.1/relax.json...
>>> Nstep, eles, pos, latv, D_mag_fix = get_sinfo(datafile='/data/home/hzw1002/dspawpy_repo/test/2.2/rho.json', scaled=False)
Reading /data/home/hzw1002/dspawpy_repo/test/2.2/rho.json...

这些信息可以用于进一步构建Structure对象, 具体参考 dspawpy.io.structure.build_Structures_from_datafile 函数

dspawpy.io.read.load_h5(dir_h5: str) dict

遍历读取h5文件中的数据,保存为字典格式

慎用此函数,因为会读取很多不需要的数据,耗时很长。

Parameters:

dir_h5 (str) -- h5文件路径

Returns:

datas -- 数据字典

Return type:

dict

Examples

>>> from dspawpy.io.read import load_h5
>>> datas = load_h5(dir_h5='/data/home/hzw1002/dspawpy_repo/test/2.2/scf.h5')
>>> datas.keys()
dict_keys(['/AtomInfo/CoordinateType', '/AtomInfo/Elements', '/AtomInfo/Grid', '/AtomInfo/Lattice', '/AtomInfo/Position', '/Eigenvalue/CBM/BandIndex', '/Eigenvalue/CBM/Energy', '/Eigenvalue/CBM/Kpoint', '/Eigenvalue/NumberOfBand', '/Eigenvalue/Spin1/BandEnergies', '/Eigenvalue/Spin1/Kpoints/Coordinates', '/Eigenvalue/Spin1/Kpoints/Grid', '/Eigenvalue/Spin1/Kpoints/NumberOfKpoints', '/Eigenvalue/Spin1/Occupation', '/Eigenvalue/VBM/BandIndex', '/Eigenvalue/VBM/Energy', '/Eigenvalue/VBM/Kpoint', '/Electron', '/Energy/EFermi', '/Energy/TotalEnergy', '/Energy/TotalEnergy0', '/Force/ForceOnAtoms', '/Stress/Direction', '/Stress/Pressure', '/Stress/Stress', '/Stress/Total', '/Structures/FinalStep', '/Structures/Step-1/Lattice', '/Structures/Step-1/Position'])
dspawpy.io.read.load_h5_todict(dir_h5: str) dict

与上一个函数区别在于合并了部分同类数据,例如

/Structures/Step-1/* 和 /Structures/Step-2/* 并入 /Structures/ 组内

dspawpy.io.read.pel_from_as(spath: str, scaled=False)

backup here for compatibility

dspawpy.io.structure module

dspawpy.io.structure.build_Structures_from_datafile(datafile: str | List[str], si=None, ele=None, ai=None, fmt=None, task='scf') List[Structure]

Deprecated alias to read

dspawpy.io.structure.convert(infile, si=None, ele=None, ai=None, infmt=None, task='scf', outfile='temp.xyz', outfmt=None, coords_are_cartesian=True)

从infile中读取结构信息,完成格式转化后写入outfile

  • 多构型 -> 单构型,仅写入最后一个离子步信息

  • 晶体结构 -> 分子结构,将丢失晶胞信息

  • 分子结构 -> 晶体结构,将添加一个2倍最大原子xyz坐标的晶胞

  • pdb 和 dump 格式可能存在浮点数精度损失

Parameters:
  • infile (str or list) --

    • h5/json/as/hzw/cif/poscar/cssr/xsf/mcsqs/prismatic/yaml/fleur-inpgen文件路径;

    • 若给定文件夹路径,可配合task参数读取内部的 {task}.h5/json 文件

    • 若给定字符串列表,将依次读取数据并合并成一个Structures列表

  • si (int, list or str) --

    • 构型编号,从 1 开始

      • si=1, 读取第一个构型

      • si=[1,2], 读取第一个和第二个构型

      • si=':', 读取所有构型

      • si='-3:', 读取最后三个构型

    • 若为空,多构型文件将读取所有构型,单构型文件将读取最新构型

    • 此参数仅对 h5/json 文件有效

  • ele (str or list) --

    • 元素符号,写法参考:'H' 或 ['H','O']

    • 若为空,将读取所有元素的原子信息

    • 此参数仅对 h5/json 文件有效

  • ai (int or list or str) --

    • 原子编号,从 1 开始

    • 用法同si

    • 若为空,将读取所有原子信息

    • 此参数仅对 h5/json 文件有效

  • fmt (str) --

    • 文件格式,包括 'as', 'hzw', 'pdb', 'h5', 'json' 5种,其他值将被忽略。

    • 若为空,文件类型将依据文件名称惯例判断。

  • task (str) --

    • 用于当 datafile 为文件夹路径时,寻找内部的 {task}.h5/json 文件。

    • 计算任务类型,包括 'scf', 'relax', 'neb', 'aimd' 四种,其他值将被忽略。

  • outfile (str) --

    • 输出文件名

  • outfmt (str) --

    • 结构文件类型,详见文件类型清单

  • coords_are_cartesian (bool) --

    • 是否写作笛卡尔坐标,默认为True;否则写成分数坐标形式

    • 此选项暂时仅对 as 和 json 格式有效

Examples

>>> from dspawpy.io.structure import convert
>>> convert('/data/home/hzw1002/dspawpy_repo/test/supplement/PtH.as', outfile='../../out/PtH.hzw')
==> /data/home/hzw1002/dspawpy_repo/out/PtH.hzw

格式转换批量测试

>>> for readable in ['relax.h5', 'system.json', 'aimd.pdb', 'latestStructure.as', 'CuO.hzw', 'POSCAR']:
...     for writable in ['pdb', 'xyz', 'dump', 'as', 'hzw', 'POSCAR']:
...         convert('/data/home/hzw1002/dspawpy_repo/test/supplement/stru/'+readable, outfile=f"../../out/{readable.split('.')[0]}.{writable}")
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/relax.h5...
==> /data/home/hzw1002/dspawpy_repo/out/relax.pdb
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/relax.h5...
==> /data/home/hzw1002/dspawpy_repo/out/relax.xyz
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/relax.h5...
==> /data/home/hzw1002/dspawpy_repo/out/relax.dump
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/relax.h5...
==> /data/home/hzw1002/dspawpy_repo/out/relax.as
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/relax.h5...
==> /data/home/hzw1002/dspawpy_repo/out/relax.hzw
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/relax.h5...
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/system.json...
==> /data/home/hzw1002/dspawpy_repo/out/system.pdb
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/system.json...
==> /data/home/hzw1002/dspawpy_repo/out/system.xyz
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/system.json...
==> /data/home/hzw1002/dspawpy_repo/out/system.dump
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/system.json...
==> /data/home/hzw1002/dspawpy_repo/out/system.as
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/system.json...
==> /data/home/hzw1002/dspawpy_repo/out/system.hzw
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/stru/system.json...
==> /data/home/hzw1002/dspawpy_repo/out/aimd.pdb
==> /data/home/hzw1002/dspawpy_repo/out/aimd.xyz
==> /data/home/hzw1002/dspawpy_repo/out/aimd.dump
==> /data/home/hzw1002/dspawpy_repo/out/aimd.as
==> /data/home/hzw1002/dspawpy_repo/out/aimd.hzw
==> /data/home/hzw1002/dspawpy_repo/out/latestStructure.pdb
==> /data/home/hzw1002/dspawpy_repo/out/latestStructure.xyz
==> /data/home/hzw1002/dspawpy_repo/out/latestStructure.dump
==> /data/home/hzw1002/dspawpy_repo/out/latestStructure.as
==> /data/home/hzw1002/dspawpy_repo/out/latestStructure.hzw
==> /data/home/hzw1002/dspawpy_repo/out/CuO.pdb
==> /data/home/hzw1002/dspawpy_repo/out/CuO.xyz
==> /data/home/hzw1002/dspawpy_repo/out/CuO.dump
==> /data/home/hzw1002/dspawpy_repo/out/CuO.as
==> /data/home/hzw1002/dspawpy_repo/out/CuO.hzw
==> /data/home/hzw1002/dspawpy_repo/out/POSCAR.pdb
==> /data/home/hzw1002/dspawpy_repo/out/POSCAR.xyz
==> /data/home/hzw1002/dspawpy_repo/out/POSCAR.dump
==> /data/home/hzw1002/dspawpy_repo/out/POSCAR.as
==> /data/home/hzw1002/dspawpy_repo/out/POSCAR.hzw
dspawpy.io.structure.read(datafile: str | List[str], si=None, ele=None, ai=None, fmt=None, task='scf')

读取一/多个h5/json文件,返回pymatgen的Structures列表

Parameters:
  • datafile (str or list) --

    • h5/json/as/hzw/cif/poscar/cssr/xsf/mcsqs/prismatic/yaml/fleur-inpgen文件路径;

    • 若给定文件夹路径,可配合task参数读取内部的 {task}.h5/json 文件

    • 若给定字符串列表,将依次读取数据并合并成一个Structures列表

  • si (int, list or str) --

    • 构型编号,从 1 开始

      • si=1, 读取第一个构型

      • si=[1,2], 读取第一个和第二个构型

      • si=':', 读取所有构型

      • si='-3:', 读取最后三个构型

    • 若为空,多构型文件将读取所有构型,单构型文件将读取最新构型

    • 此参数仅对 h5/json 文件有效

  • ele (str or list) --

    • 元素符号,写法参考:'H' 或 ['H','O']

    • 若为空,将读取所有元素的原子信息

    • 此参数仅对 h5/json 文件有效

  • ai (int or list or str) --

    • 原子编号,从 1 开始

    • 用法同si

    • 若为空,将读取所有原子信息

    • 此参数仅对 h5/json 文件有效

  • fmt (str) --

    • 文件格式,包括 'as', 'hzw', 'pdb', 'h5', 'json' 5种,其他值将被忽略。

    • 若为空,文件类型将依据文件名称惯例判断。

  • task (str) --

    • 用于当 datafile 为文件夹路径时,寻找内部的 {task}.h5/json 文件。

    • 计算任务类型,包括 'scf', 'relax', 'neb', 'aimd' 四种,其他值将被忽略。

Returns:

pymatgen_Structures -- 结构列表

Return type:

List[Structure]

Examples

>>> from dspawpy.io.structure import read

读取单个文件生成 Structures 列表

>>> pymatgen_Structures = read(datafile='/data/home/hzw1002/dspawpy_repo/test/supplement/PtH.as')
>>> len(pymatgen_Structures)
1
>>> pymatgen_Structures = read(datafile='/data/home/hzw1002/dspawpy_repo/test/supplement/PtH.hzw')
>>> len(pymatgen_Structures)
1
>>> pymatgen_Structures = read(datafile='/data/home/hzw1002/dspawpy_repo/test/supplement/aimd.pdb')
>>> len(pymatgen_Structures)
1000
>>> pymatgen_Structures = read(datafile='/data/home/hzw1002/dspawpy_repo/test/2.1/relax.h5')
Reading /data/home/hzw1002/dspawpy_repo/test/2.1/relax.h5...
>>> len(pymatgen_Structures)
3
>>> pymatgen_Structures = read(datafile='/data/home/hzw1002/dspawpy_repo/test/2.1/relax.json')
Reading /data/home/hzw1002/dspawpy_repo/test/2.1/relax.json...
>>> len(pymatgen_Structures)
3

注意pymatgen_Structures是由多个 Structure 对象组成的列表,每个 Structure 对象分别对应一个构型。如果只有一个构型,也会返回列表,请使用 pymatgen_Structures[0] 获取 Structure 对象

当datafile为列表时,将依次读取多个文件,合并成一个Structures列表

>>> pymatgen_Structures = read(datafile=['/data/home/hzw1002/dspawpy_repo/test/supplement/aimd1.h5','/data/home/hzw1002/dspawpy_repo/test/supplement/aimd2.h5'])
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/aimd1.h5...
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/aimd2.h5...
dspawpy.io.structure.write(structure, filename: str, fmt=None, coords_are_cartesian=True)

往结构文件中写入信息

Parameters:
  • structure (Structure) -- pymatgen的Structure对象

  • filename (str) -- 结构文件名

  • fmt (str) --

    • 结构文件类型,原生支持 'json', 'as', 'hzw', 'pdb', 'xyz', 'dump' 六种

  • coords_are_cartesian (bool) --

    • 是否写作笛卡尔坐标,默认为True;否则写成分数坐标形式

    • 此选项暂时仅对 as 和 json 格式有效

Examples

先读取结构信息:

>>> from dspawpy.io.structure import read
>>> s = read('/data/home/hzw1002/dspawpy_repo/test/2.15/01/neb01.h5')
Reading /data/home/hzw1002/dspawpy_repo/test/2.15/01/neb01.h5...
>>> len(s)
17

将结构信息写入文件:

>>> from dspawpy.io.structure import write
>>> write(s, filename='/data/home/hzw1002/dspawpy_repo/test/out/PtH.json', coords_are_cartesian=True)
==> /data/home/hzw1002/dspawpy_repo/test/out/PtH.json
>>> write(s, filename='/data/home/hzw1002/dspawpy_repo/test/out/PtH.as', coords_are_cartesian=True)
==> /data/home/hzw1002/dspawpy_repo/test/out/PtH.as
>>> write(s, filename='/data/home/hzw1002/dspawpy_repo/test/out/PtH.hzw', coords_are_cartesian=True)
==> /data/home/hzw1002/dspawpy_repo/test/out/PtH.hzw

pdb, xyz, dump 三种类型的文件,可以写入多个构型,形成“轨迹”。生成的 xyz 等轨迹文件可使用 OVITO 等可视化软件打开观察。

>>> write(s, filename='/data/home/hzw1002/dspawpy_repo/test/out/PtH.pdb', coords_are_cartesian=True)
==> /data/home/hzw1002/dspawpy_repo/test/out/PtH.pdb
>>> write(s, filename='/data/home/hzw1002/dspawpy_repo/test/out/PtH.xyz', coords_are_cartesian=True)
==> /data/home/hzw1002/dspawpy_repo/test/out/PtH.xyz
>>> write(s, filename='/data/home/hzw1002/dspawpy_repo/test/out/PtH.dump', coords_are_cartesian=True)
==> /data/home/hzw1002/dspawpy_repo/test/out/PtH.dump

单结构信息推荐使用 as 格式存储,如果 Structure 中有磁矩或自由度信息,将会按最完整的格式统一写入,形如 Fix_x, Fix_y, Fix_z, Mag_x, Mag_y, Mag_z,自由度信息默认为 F,磁矩默认为 0.0。可视情况自行手动删除生成的 as 文件中的这些默认信息

>>> with open('/data/home/hzw1002/dspawpy_repo/test/out/PtH.as') as f:
...     print(f.read())
...
Total number of atoms
13
Lattice Fix_x Fix_y Fix_z
 5.60580000 0.00000000 0.00000000 F F F
 0.00000000 5.60580000 0.00000000 F F F
 0.00000000 0.00000000 16.81740000 F F F
Cartesian Fix_x Fix_y Fix_z Mag
H 2.58985263 3.72755271 6.94246998 F F F 0.0
Pt 1.37942121 1.39655502 1.96304099 F F F 0.0
Pt 4.20055071 1.40326436 1.94681875 F F F 0.0
Pt 1.37462277 4.20932677 2.00221003 F F F 0.0
Pt 4.21197615 4.21324064 1.99578112 F F F 0.0
Pt 5.58740047 5.59517338 3.93274445 F F F 0.0
Pt 5.58633749 2.78068345 3.91301343 F F F 0.0
Pt 2.79076605 5.59305895 3.91208092 F F F 0.0
Pt 2.78904685 2.78501463 3.89610696 F F F 0.0
Pt 1.38102265 1.36691874 5.84326681 F F F 0.0
Pt 4.19057728 1.36788897 5.84877666 F F F 0.0
Pt 1.34667410 4.16198043 5.89298591 F F F 0.0
Pt 4.17046728 4.15729941 5.89874209 F F F 0.0

写成其他类型的结构文件,将忽略磁矩和自由度信息

dspawpy.io.utils module

class dspawpy.io.utils.Formula(formula: str = '', *, strict: bool = False, format: str = '', _tree=None, _count=None)

Bases: object

class dspawpy.io.utils.IdealGasThermo(vib_energies, geometry, potentialenergy=0.0, elements=None, positions=None, symmetrynumber=None, spin=None, natoms=None)

Bases: object

import from ase.thermochemistry.IdealGasThermo

Parameters:
  • vib_energies (list) -- List of vibrational energies in eV.

  • geometry (str) -- One of 'linear', 'nonlinear', 'monatomic'

  • potentialenergy (float) -- Potential energy in eV.

  • elements (list) -- such as ['H', 'O'].

  • symmetrynumber (int) -- Symmetry number.

  • spin (int) -- Spin multiplicity.

  • natoms (int) -- Number of atoms.

Examples

>>> from dspawpy.io.utils import IdealGasThermo
>>> thermo = IdealGasThermo(vib_energies=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6],
...                         geometry='linear', potentialenergy=0.,  # eV
...                         elements=['H', 'O'], positions=[[0, 0, 0], [0, 0, 1]],  # angstrom
...                         symmetrynumber=None, spin=None, natoms=None)
>>> thermo.get_enthalpy(298.15)  # K
Enthalpy components at T = 298.15 K:
===============================
E_pot                  0.000 eV
E_ZPE                  0.300 eV
Cv_trans (0->T)        0.039 eV
Cv_rot (0->T)          0.026 eV
Cv_vib (0->T)          0.000 eV
(C_v -> C_p)           0.026 eV
-------------------------------
H                      0.390 eV
===============================
0.389924026967057
get_ZPE_correction()

Returns the zero-point vibrational energy correction in eV.

get_enthalpy(temperature)

Returns the enthalpy, in eV, in the ideal gas approximation at a specified temperature (K).

get_entropy(temperature, pressure)

Returns the entropy, in eV/K, in the ideal gas approximation at a specified temperature (K) and pressure (Pa).

get_gibbs_energy(temperature, pressure)

Returns the Gibbs free energy, in eV, in the ideal gas approximation at a specified temperature (K) and pressure (Pa).

dspawpy.io.utils.count_tree(tree)
dspawpy.io.utils.d_band(spin, dos_data: CompleteDos)

计算d带中心

Parameters:
  • spin (Spin.up或Spin.down) -- 自旋类型,

  • dos_data (pymatgen.electronic_structure.dos.CompleteDos) -- dos数据

Returns:

db1 -- d带中心数值

Return type:

float

Examples

>>> from dspawpy.io.utils import d_band
>>> from dspawpy.io.read import get_dos_data
>>> dos_data = get_dos_data("/data/home/hzw1002/dspawpy_repo/test/supplement/dos.h5")  # 从dos.h5中读取数据
>>> for spin in dos_data.densities:
...     print('spin=', spin)
...     c = d_band(spin, dos_data)
...     print(c)
spin= 1
-3.666508748164936
dspawpy.io.utils.eles2masses(eles: List[str]) List[float]

将元素列表转换为质量列表

Parameters:

eles (List[str]) -- 元素列表

Returns:

质量列表

Return type:

List[float]

Examples

>>> from dspawpy.io.utils import eles2masses
>>> eles = ["H", "O"]
>>> masses = eles2masses(eles)
>>> masses
array([ 1.008, 15.999])
dspawpy.io.utils.getTSads(fretxt: str = 'frequency.txt', T: float = 298.15, outfile: str = 'TSads.dat')

从fretext中读取数据,计算ZPE和TS

将另外保存结果到 TSads.dat 中

Parameters:
  • fretxt (str) -- 记录频率信息的文件所在路径, 默认当前路径下的'frequency.txt'

  • T (float) -- 温度,单位K, 默认298.15

  • outfile (str) -- 保存结果的文件名,默认为'TSads.dat'

Returns:

TS -- 熵校正

Return type:

float

Examples

>>> from dspawpy.io.utils import getTSads
>>> TS = getTSads(fretxt='/data/home/hzw1002/dspawpy_repo/test/2.13/frequency.txt', T=298.15, outfile='../APIout/TSads.dat')
Reading /data/home/hzw1002/dspawpy_repo/test/2.13/frequency.txt ...
   Frequency (THz)
0        68.873993

==> /data/home/hzw1002/dspawpy_repo/dspaw-manual-cn/APIout/TSads.dat
--> T*S (eV): 4.7566997225177686e-06
dspawpy.io.utils.getTSgas(fretxt='frequency.txt', datafile='.', potentialenergy=0, elements=None, geometry='linear', positions=None, symmetrynumber=1, spin=1, temperature=298.15, pressure=101325, outfile='TSgas.txt')

理想气体近似下,计算熵的能量贡献

Parameters:
  • fretxt (str) -- 记录频率信息的文件所在路径, 默认当前路径下的'frequency.txt'

  • datafile (str) -- 计算结果json或h5文件或包含它们的文件夹路径, 默认当前路径; 如果设置为None,则需要传入elements和positions参数

  • potentialenergy (float) -- 势能,单位eV

  • elements (list) -- 元素列表,如果

  • geometry (str) -- 分子几何,monatomic, linear, nonlinear

  • positions (list) -- 原子坐标,单位Angstrom

  • symmetrynumber (int) -- 对称数

  • spin (int) -- 自旋数

  • temperature (float) -- 温度,单位K

  • pressure (float) -- 压强,单位Pa

  • outfile (str) -- 输出文件路径,默认当前路径下的'TSgas.txt'

Returns:

TSgas -- 理想气体近似下,计算熵的能量贡献,单位eV

Return type:

float

Examples

>>> from dspawpy.io.utils import getTSgas
>>> TSgas = getTSgas(fretxt='/data/home/hzw1002/dspawpy_repo/test/2.13/frequency.txt', datafile='/data/home/hzw1002/dspawpy_repo/test/2.13/frequency.h5', potentialenergy=-0.0,  geometry='linear', symmetrynumber=1, spin=1, temperature=298.15, pressure=101325.0, outfile='../APIout/TSgas.txt')
Reading /data/home/hzw1002/dspawpy_repo/test/2.13/frequency.h5...
==> /data/home/hzw1002/dspawpy_repo/dspaw-manual-cn/APIout/TSgas.txt
>>> print(TSgas)
0.8515317035550232
>>> TSgas = getTSgas(fretxt='/data/home/hzw1002/dspawpy_repo/test/2.13/frequency.txt', datafile='/data/home/hzw1002/dspawpy_repo/test/2.13/frequency.h5', potentialenergy=-0.0,  geometry='linear', symmetrynumber=1, spin=1, temperature=298.15, pressure=101325.0, outfile='../APIout/TSgas.txt')
Reading /data/home/hzw1002/dspawpy_repo/test/2.13/frequency.h5...
==> /data/home/hzw1002/dspawpy_repo/dspaw-manual-cn/APIout/TSgas.txt
>>> TSgas
0.8515317035550232
dspawpy.io.utils.getZPE(fretxt: str = 'frequency.txt', outfile: str = 'ZPE.dat')

从fretext中读取数据,计算ZPE

将另外保存结果到 ZPE_TS.dat 中

Parameters:
  • fretxt (str) -- 记录频率信息的文件所在路径, 默认当前路径下的'frequency.txt'

  • outfile (str) -- 保存结果的文件所在路径, 默认当前路径下的'ZPE.dat'

Returns:

ZPE -- 零点能

Return type:

float

Examples

>>> from dspawpy.io.utils import getZPE
>>> ZPE= getZPE(fretxt='/data/home/hzw1002/dspawpy_repo/test/2.13/frequency.txt', outfile='../APIout/ZPE.txt')
Reading /data/home/hzw1002/dspawpy_repo/test/2.13/frequency.txt ...
   Frequency (meV)
0       284.840033

--> Zero-point energy,  ZPE (eV): 0.1424200165
==> /data/home/hzw1002/dspawpy_repo/dspaw-manual-cn/APIout/ZPE.txt
>>> ZPE
0.1424200165
dspawpy.io.utils.get_absfile(datafile: str, task: str, only_h5: bool = False)

根据给定的datafile,返回所需数据文件的绝对路径

Parameters:
  • datafile (str) -- h5/json数据文件路径或其文件夹路径,可以是相对路径

  • task (str) -- 计算任务类型,如 scf, optical 等

  • only_h5 (bool) -- 是否只寻找h5文件,默认False

Raises:

FileNotFoundError --

  • 指定的文件夹路径不包含相应h5/json数据文件 - 指定的文件路径不存在

Returns:

absfile -- 所需数据文件的绝对路径

Return type:

str

dspawpy.io.utils.get_ma(elements, positions, Natom)

Get the moments of inertia along the principal axes.

The three principal moments of inertia are computed from the eigenvalues of the symmetric inertial tensor. Periodic boundary conditions are ignored. Units of the moments of inertia are amu*angstrom**2.

class dspawpy.io.utils.iofunction(mode)

Bases: object

Decorate func so it accepts either str or file.

(Won't work on functions that return a generator.)

dspawpy.io.utils.label_to_symbol(label)

Convert a valid espresso ATOMIC_SPECIES label to a chemical symbol.

Parameters:

label (str) -- chemical symbol X (1 or 2 characters, case-insensitive) or chemical symbol plus a number or a letter, as in "Xn" (e.g. Fe1) or "X_*" or "X-*" (e.g. C1, C_h; max total length cannot exceed 3 characters).

Returns:

symbol -- The best matching species from ase.utils.chemical_symbols

Return type:

str

Raises:

KeyError -- Couldn't find an appropriate species.

Notes

It's impossible to tell whether e.g. He is helium or hydrogen labelled 'e'.

dspawpy.io.utils.parse(f: str)
dspawpy.io.utils.parse2(f: str)
dspawpy.io.utils.reader(func)
dspawpy.io.utils.string2symbols(s: str) List[str]

Convert string to list of chemical symbols.

dspawpy.io.utils.strip_number(s: str)

dspawpy.io.write module

dspawpy.io.write.to_file(structure, filename: str, fmt=None, coords_are_cartesian=True)

Deprecated. Use dspawpy.io.structure.write() instead.

dspawpy.io.write.write_VESTA(in_filename: str, data_type, out_filename='DS-PAW.cube', subtype=None, format='cube')

从包含电子体系信息的json或h5文件中读取数据并写入VESTA格式的文件中

Parameters:
  • in_filename (str) -- 包含电子体系信息的json或h5文件路径

  • data_type (str) -- 数据类型,支持 "rho", "potential", "elf", "pcharge", "rhoBound"

  • out_filename (str) -- 输出文件路径, 默认 "DS-PAW.cube"

  • subtype (str) -- 用于指定data_type的数据子类型,默认为None,将读取 potential 的 TotalElectrostaticPotential 数据

  • format (str) -- 输出的数据格式,支持 "cube" 和 "vesta" ("vasp"),默认为 "cube",大小写不敏感

Returns:

out_filename -- VESTA格式的文件

Return type:

file

Examples

>>> from dspawpy.io.write import write_VESTA
>>> write_VESTA("/data/home/hzw1002/dspawpy_repo/test/2.2/rho.json", "rho", out_filename='/data/home/hzw1002/dspawpy_repo/test/out/rho.cube')
Reading /data/home/hzw1002/dspawpy_repo/test/2.2/rho.json...
==> /data/home/hzw1002/dspawpy_repo/test/out/rho.cube
dspawpy.io.write.write_delta_rho_vesta(total, individuals, output='delta_rho.cube', format='cube')

电荷密度差分可视化

DeviceStudio暂不支持大文件,临时写成可以用VESTA打开的格式

Parameters:
  • total (str) -- 体系总电荷密度文件路径,可以是h5或json格式

  • individuals (list of str) -- 体系各组分电荷密度文件路径,可以是h5或json格式

  • output (str) -- 输出文件路径,默认 "delta_rho.cube"

  • format (str) -- 输出的数据格式,支持 "cube" 和 "vasp",默认为 "cube"

Returns:

output -- 电荷差分(total-individual1-individual2-...)后的电荷密度文件,

Return type:

file

Examples

>>> from dspawpy.io.write import write_delta_rho_vesta
>>> write_delta_rho_vesta(total='/data/home/hzw1002/dspawpy_repo/test/supplement/AB.h5',
...     individuals=['/data/home/hzw1002/dspawpy_repo/test/supplement/A.h5', '/data/home/hzw1002/dspawpy_repo/test/supplement/B.h5'],
...     output='/data/home/hzw1002/dspawpy_repo/test/out/delta_rho.cube')
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/AB.h5...
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/A.h5...
Reading /data/home/hzw1002/dspawpy_repo/test/supplement/B.h5...
==> /data/home/hzw1002/dspawpy_repo/test/out/delta_rho.cube